<?php
/**
 * CSV定義フォーム
 *
 * @author tanaka
 * @package Form
 * @subpackage Import_Abstract
 */
abstract class Form_Import_Abstract
{
	/**
	 * CSV
	 * @var File_Csv_ReaderRelationAbstract
	 */
	protected $_csv;

	/**
	 * 検証メッセージ
	 *
	 * @var array
	 */
	protected $_messages = array();

	/**
	 * 検証結果
	 * @var bool
	 */
	protected $_result = null;

	/**
	 * コンストラクタ
	 *
	 * @param File_Csv_ReaderRelationAbstract $csv
	 * @return void
	 */
	public function __construct(File_Csv_ReaderRelationAbstract $csv)
	{
		$this->_csv = $csv;
	}

	/**
	 * 検証メッセージを返します。
	 *
	 * @return array
	 */
	public function getMessages()
	{
		if (is_null($this->_result)) {
			$this->isValid();
		}

		return $this->_messages;
	}

	/**
	 * 検証結果を返します。
	 *
	 * @return bool
	 */
	abstract public function isValid();

	/**
	 * メッセージのセット
	 *
	 * @param string|array $message
	 * @param int|array optional $lineNumber
	 * @return void
	 */
	protected function _setErrorMessage($message, $lineNumber = null)
	{
		$prefix = '';
		if (is_array($lineNumber)) {
			foreach ($lineNumber as $line) {

				if (strlen($prefix)) $prefix .= ',';

				$prefix .= $line . '行目';
			}

			$prefix .= ':';
		}
		elseif (!is_null($lineNumber)) {
			$prefix = $lineNumber . '行目:';
		}

		if (is_array($message)) {
			foreach ($message as $msg) {
				$this->_messages[] = $prefix . $msg;
			}
			return;
		}

		$this->_messages[] = $prefix . $message;
	}

	/**
	 * キーの値を配列で返します。
	 * 同じ値があった場合は一番上の行番号をキーにします。
	 * @deprecated
	 * @param string $key
	 * @return public
	 */
	public function getColumnData($key)
	{
	$result = array();
		foreach ($this->_csv->getAllData() as $lineNumber => $data) {

		if(!isset($data[$key]) || !strlen($data[$key])){
		continue;
		}

		if (!in_array($data[$key], $result)) {
		$result[$lineNumber] = $data[$key];
		}
	}

	return $result;
	}
}
